//给定两个用链表表示的整数，每个节点包含一个数位。 
//
// 这些数位是反向存放的，也就是个位排在链表首部。 
//
// 编写函数对这两个整数求和，并用链表形式返回结果。 
//
// 
//
// 示例： 
//
// 输入：(7 -> 1 -> 6) + (5 -> 9 -> 2)，即617 + 295
//输出：2 -> 1 -> 9，即912
// 
//
// 进阶：思考一下，假设这些数位是正向存放的，又该如何解决呢? 
//
// 示例： 
//
// 输入：(6 -> 1 -> 7) + (2 -> 9 -> 5)，即617 + 295
//输出：9 -> 1 -> 2，即912
// 
//
// Related Topics 递归 链表 数学 👍 203 👎 0


package LeetCode.editor.cn;


import java.util.List;

/**
 * @author ldltd
 * @date 2025-06-19 11:03:58
 * @description 面试题 02.05.链表求和
 
 */
 
public class SumListsLcci {
    public static void main(String[] args) {
    //测试代码
    SumListsLcci fun = new SumListsLcci();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)

//  Definition for singly-linked list.
  public class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int t=0;
        ListNode res=new ListNode(-1);
        ListNode p=new ListNode(-1);
        res.next=p;
        while (l1!=null||l2!=null||t!=0){
            int a=l1!=null?l1.val:0;
            int b=l2!=null?l2.val:0;
            int val = t + a + b;
            ListNode node=new ListNode(val%10);
            t=val/10;
            p.next=node;
            p=p.next;
            if(l1!=null)
                l1=l1.next;
            if(l2!=null)
                l2=l2.next;
        }

        return res.next.next;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
